﻿using System;
using System.Collections;
using System.Linq;
using System.Text;
using Tibet.Entidades;

namespace Tibet.Logica
{
    public class LogicaValidarPaquete : Regla
    {
          
        //Atributos

        private int _tipo;
         
        //Propiedades

        public int Tipo
        {
            get { return _tipo; }
            set { _tipo = value; }
        }
       
        //Metodos
        public LogicaValidarPaquete(int tipo)
        {
            //Constructor
            Tipo = tipo; 
        }

        override public Resultado Aplicar(ArrayList archivo)
        {
            try
            {
                if (Tipo == 1)
                    return ValidarPaqueteMayus(archivo);
                if (Tipo == 2)
                    return ValidarPaqueteMinus(archivo);
                return null;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        public Resultado ValidarPaqueteMayus(ArrayList archivo)
        /*Valida que el nombre del namespace (Paquete) comienze con Mayuscula.
          Ejemplo: Nombrejemeplo             
         */
        {
            //Variables iniciales
            int i = 0;      //Contador de iteraciones para los ciclos (for).
            int LineaActual = 0; //Linea actual que se esta leyendo.
            Resultado Resp = new Resultado(); //Objeto resultado que sera retornado.
            string[] subCadena; //Arreglo en el que guardaremos el resultado de split
            string aux; //String auxiliar
            string nombreSpace; //Variable que almacena en nombre del namespace

            //Inicializamos Resp asumiendo que el archivo cumple con la regla.
            Resp.Fecha = new DateTime();
            Resp.Fecha = DateTime.Now;
            Resp.Respuesta = true;
            Resp.Mensaje = "No se encontraron errores";
            Resp.Linea = LineaActual;

            try
            {
                foreach (string linea in archivo) //Recorro la lista linea por linea
                {
                    LineaActual++;
                    if (linea.Contains("namespace"))
                    {
                        subCadena = linea.Split(' ');
                        foreach (string actual in subCadena)
                        {
                            if (actual.CompareTo("namespace") == 0)
                            {
                                nombreSpace = subCadena[i + 1];
                                aux = nombreSpace[0].ToString();
                                if (aux.CompareTo(aux.ToUpper()) != 0) //Si el nombre no comienza en mayuscula
                                {
                                    Resp.Linea = LineaActual;
                                    Resp.Mensaje = "El nombre del namespace no comienza con mayusculas";
                                    Resp.Respuesta= false;
                                    return Resp;
                                }
                                
                            }
                            i++;
                        }
                    }
                }
                return Resp; //Retornamos respuesta.
            }
            catch (Exception e)
            {
                Resp.Linea = LineaActual;
                Resp.Respuesta = false;
                Resp.Mensaje = "Ocurrio un error inesperado al leer la linea " + LineaActual + ". Error " + e.Message;
                return Resp;
            }
        }

         public Resultado ValidarPaqueteMinus(ArrayList archivo)
        /*Valida que el nombre del namespace (Paquete) comienze con Mayuscula.
          Ejemplo: Nombrejemeplo             
         */
        {
            //Variables iniciales
            int i = 0;      //Contador de iteraciones para los ciclos (for).
            int LineaActual = 0; //Linea actual que se esta leyendo.
            Resultado Resp = new Resultado(); //Objeto resultado que sera retornado.
            string[] subCadena; //Arreglo en el que guardaremos el resultado de split
            string aux; //String auxiliar
            string nombreSpace; //Variable que almacena en nombre del namespace

            //Inicializamos Resp asumiendo que el archivo cumple con la regla.
            Resp.Fecha = new DateTime();
            Resp.Fecha = DateTime.Now;
            Resp.Respuesta = true;
            Resp.Mensaje = "No se encontraron errores";
            Resp.Linea = LineaActual;

            try
            {
                foreach (string linea in archivo) //Recorro la lista linea por linea
                {
                    LineaActual++;
                    if (linea.Contains("namespace"))
                    {
                        subCadena = linea.Split(' ');
                        foreach (string actual in subCadena)
                        {
                            if (actual.CompareTo("namespace") == 0)
                            {
                                nombreSpace = subCadena[i + 1];
                                aux = nombreSpace[0].ToString();
                                if (aux.CompareTo(aux.ToUpper()) == 0) //Si el nombre no comienza en mayuscula
                                {
                                    Resp.Linea = LineaActual;
                                    Resp.Mensaje = "El nombre del namespace no comienza con minuscula";
                                    Resp.Respuesta= false;
                                    return Resp;
                                }
                                
                            }
                            i++;
                        }
                    }
                }
                return Resp; //Retornamos respuesta.
            }
            catch (Exception e)
            {
                Resp.Linea = LineaActual;
                Resp.Respuesta = false;
                Resp.Mensaje = "Ocurrio un error inesperado al leer la linea " + LineaActual + ". Error " + e.Message;
                return Resp;
            }
        }


       }
    }

